package com.bw.common;

import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSONObject;

import java.util.HashMap;
import java.util.Map;

public class GiteeUtils {

    // todo gitee应用的client_id
    public static final String CLIENT_ID = "815fbc2de56fa0d45bd36205b1d7bd2417cf22c29eada38793f2208abc4da4b5";
    //todo gitee应用的client_SECRET
    public static final String CLIENT_SECRET = "33fdd8895174588781e23d5225c11a6562dd62243b33ebb10035fe9d869de11d";
    //todo gitee应用的回调地址
    public static final String REDIRECT_URL = "http://localhost:8080/callbackCode.do";

    //获取token的请求地址
    public static final String ACCESS_TOKEN_URL = "https://gitee.com/oauth/token";
    //获取用户信息的请求地址
    public static final String GET_USER_INFO_URL = "https://gitee.com/api/v5/user?access_token=";


    public static JSONObject getGiteeUserInfoJson(String code) {
        try {
            String accessToken = getAccessTokenByCode(code);
            if (accessToken != null) {
//                String userInfoJsonStr = HttpUtil.get(GET_USER_INFO_URL + accessToken);
//                JSONObject userJsonObject = JSONObject.parseObject(userInfoJsonStr);
                return getGiteeUserInfoByToken(accessToken);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }



    public static Object getGiteeUserInfoProperty(JSONObject userJsonObject, UserInfoPropertyEnum userInfoPropertyEnum) {
        try {
            return userJsonObject.get(userInfoPropertyEnum.getKey());


        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }

    }

    /**
     * 根据临时授权码获取token令牌
     * 调用gitee获取token
     *
     * @param code 临时授权码
     * @return  token令牌
     */
    public static String getAccessTokenByCode(String code) {
        try {
            //组装请求参数
            Map<String, Object> map = new HashMap<>();
            map.put("grant_type", "authorization_code");
            map.put("code", code);
            map.put("client_id", CLIENT_ID);
            map.put("redirect_uri", REDIRECT_URL);
            map.put("client_secret", CLIENT_SECRET);
            //发起http请求,用Java代码发起一次http调用
            String jsonInfo = HttpUtil.post(ACCESS_TOKEN_URL, map);
            JSONObject jsonObject = JSONObject.parseObject(jsonInfo);
            //解析返回值，得到token
            String accessToken = (String) jsonObject.get("access_token");
            return accessToken;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    /**
     * 根据token令牌获取用户信息
     *  调用gitee获取用户信息
     * @param accessToken  token令牌
     * @return 用户信息
     */
    public static JSONObject getGiteeUserInfoByToken(String accessToken) {
        //发起http请求
        String userInfoJsonStr = HttpUtil.get(GET_USER_INFO_URL + accessToken);
        //返回的用户信息
        JSONObject userJsonObject = JSONObject.parseObject(userInfoJsonStr);
        return userJsonObject;
    }

    public enum UserInfoPropertyEnum {
        AVATAR_URL("avatar_url"),//头像
        ID("id"), //用户的giteeId int类型的
        NAME("name"), //把这个字段当作昵称
        LOGIN("login");//把这个字段当作用户名
        private String key;
        UserInfoPropertyEnum(String key) {
            this.key = key;
        }
        public String getKey() {
            return key;
        }
    }
}
